package src.edu.wayne.cs.csc4110.hw6.interfaces;


import java.util.ArrayList;
import java.util.HashSet;

import javax.swing.JPanel;

import src.edu.wayne.cs.csc4110.hw6.plugins.GamePlugin;
import src.edu.wayne.cs.csc4110.hw6.plugins.Status;

public interface FrameWork {
	

	public abstract void startFrameWork();

	/**
	 * Method for other users to log into the framework.
	 * @Parameters
	 * None
	 * @return int UserId
	 */

	public abstract void addUserToSession(User user);
	
	/**
	 * Saves the game for later use.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param gameId The id of the actual game that is being saved.
	 * @return <b>True</b> if save was successful, <b>False</b> otherwise.
	 * */
	public abstract boolean saveGame(int gameId);
	/**
	 * Quits the current game.
	 * @author Kyle Andrews
	 * @author Daniel J. Borsodi
	 * @author Bryan Lawrence Taylor
	 * @param gameId The id of the actual game that is being saved.
	 * @return <b>True</b> if quit was successful, <b>False</b> otherwise.
	 * */
	public abstract boolean quitGame(int gameId);
	
	/**
	 * Method starts a new game assigning the user id
	 * as the host of the game.
	 * 
	 * @param userId
	 * @return int gameId
	 */
	public abstract int startGame(int userId);
	
	/**
	 * Method is really meant for debug purposes.
	 * @param dataBase
	 */
	public abstract void setDataBase(FacelookDatabase dataBase);
	
	public abstract FacelookDatabase getDataBase();

	public abstract Game getPlugin();

	public abstract void setPlugin(Game plugin);

	public abstract HashSet<User> getUsersInSession();

	public abstract void setUsersInSession(HashSet<User> usersInSession);
	
	public abstract boolean isUserInCurrentSession(User user);
	
	public abstract void removeUserFromSession(User user);
	
	public ArrayList<Game> getGameList();

	public void setCurrentPanel(JPanel newPanel, String newTitle);
//	/**
//	 * Method to let plugin update the user display
//	 * @author Kyle Andrews
//	 * @author Daniel J. Borsodi
//	 * @author Bryan Lawrence Taylor
//	 * @param gamePanel Panel that is going to replace whatever is currently being displayed.
//	 * @param gameStatus The current status of the game.
//	 * @param userId The ID of the current user.
//	 * */
//	public abstract void setScreen(JPanel gamePanel, GameStatus gameStatus, int userId);

}
